home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / utils / file / managers / mc-3.2 / mc-3 / mc-3.2.1 / nt / dirent.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-17  |  1.9 KB  |  92 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <dirent.h>
  6. #include <windows.h>
  7. #include <errno.h>
  8.  
  9. DIR *opendir (const char * a_dir)
  10. {
  11.     int err;
  12.     WIN32_FIND_DATA wfd;
  13.     DIR* dd_dir = (DIR*) malloc (sizeof(DIR));
  14.  
  15.     char *c_dir = malloc (strlen(a_dir) + 4);
  16.     strcpy (c_dir, a_dir);
  17.     strcat (c_dir, "\\*");
  18.             
  19.     dd_dir->d_handle = FindFirstFile (c_dir, &wfd);
  20.     if (dd_dir->d_handle == INVALID_HANDLE_VALUE)    {
  21.         err = GetLastError();
  22.         switch (err) {
  23.             case ERROR_NO_MORE_FILES:
  24.             case ERROR_FILE_NOT_FOUND:
  25.             case ERROR_PATH_NOT_FOUND:
  26.                 errno = ENOENT;
  27.                 break;
  28.                 case ERROR_NOT_ENOUGH_MEMORY:
  29.                 errno = ENOMEM;
  30.                 break;
  31.                 default:
  32.                 errno = EINVAL;
  33.                 break;
  34.         }
  35.         free(dd_dir);
  36.         return NULL;
  37.     }
  38.     dd_dir->d_attr = (wfd.dwFileAttributes == FILE_ATTRIBUTE_NORMAL)
  39.                            ? 0 : wfd.dwFileAttributes;
  40.  
  41.     dd_dir->d_time = dd_dir->d_date = 10; //#
  42.     dd_dir->d_size = wfd.nFileSizeLow;
  43.     strcpy (dd_dir->d_name, wfd.cFileName);
  44.     dd_dir->d_first = 1;
  45.     
  46.     free (c_dir);
  47.     return dd_dir;
  48. }
  49.  
  50. DIR *readdir( DIR * dd_dir)
  51. {
  52.     int err;
  53.     WIN32_FIND_DATA wfd;
  54.     
  55.     if (dd_dir->d_first) {
  56.         dd_dir->d_first = 0;
  57.         return dd_dir;
  58.     }
  59.             
  60.     if(!FindNextFile (dd_dir->d_handle, &wfd)) {
  61.         err = GetLastError();
  62.         switch (err) {
  63.             case ERROR_NO_MORE_FILES:
  64.             case ERROR_FILE_NOT_FOUND:
  65.             case ERROR_PATH_NOT_FOUND:
  66.                 errno = ENOENT;
  67.                 break;
  68.                 case ERROR_NOT_ENOUGH_MEMORY:
  69.                 errno = ENOMEM;
  70.                 break;
  71.                 default:
  72.                 errno = EINVAL;
  73.                 break;
  74.         }
  75.         return NULL;
  76.     }
  77.     dd_dir->d_attr = (wfd.dwFileAttributes == FILE_ATTRIBUTE_NORMAL)
  78.                            ? 0 : wfd.dwFileAttributes;
  79.  
  80.     dd_dir->d_time = dd_dir->d_date = 10; //#
  81.     dd_dir->d_size         = wfd.nFileSizeLow;
  82.     strcpy (dd_dir->d_name, wfd.cFileName);
  83.     return dd_dir;
  84. }          
  85.  
  86. int closedir (DIR *dd_dir)
  87. {
  88.     FindClose(dd_dir->d_handle);
  89.     free (dd_dir);
  90. }
  91.  
  92.